<?php

if (!defined('endl'))
  define('endl', "\n");

/////////////////////////////////////////////////
// Nettoyage des tableaux
function strip_array($array)
{
  if (is_array($array))
  {
    foreach($array as $k => $v)
    {
      if (is_array($v))
        $array[$k] = strip_array($v);
      elseif (is_string($v))
        $array[$k] = stripslashes($v);
    }
  }
  return $array;
}

// Fonction d'?iture dans un flux html
function ph($str)
{
  if ($str)
    echo htmlentities($str);
}

// Fonction d'?iture dans un flux html en gardant
//   les sauts de ligne
function phbr($str)
{
  if ($str)
    echo nl2br(htmlentities($str));
}

function pt($name)
{
  if ($name)
    echo $_GLOBAL['TPL'][$name];
}

// Fonction de debug
function debug($msg, $vars=array())
{
  echo '<hr><b>DEBUG : </b>'.$msg.'<br>';
  if (is_array($vars))
  {
    foreach ($vars as $name => $val)
    {
      echo '- '.$name.' = '.nl2br(print_r($val, true)).'<br>';
    }
  }
  else
  {
    echo $vars;
  }
  echo '<hr>';
}

// Fonction d'extraction de données d'un tableau bidimensionnel
// Utile lors de recuperation de données BdD
// Utilisation:
//   array_keep($array, 'nom de la clef');
function array_keep_callback(&$value, $key, $keep)
{
  $value = $value[$keep];
}

function array_keep($array, $keep)
{
  array_walk( $array
            , 'array_keep_callback'
            , $keep );
  return $array;
}

// getInfoSemaines
function getInfoSemaines($dateSql)
{
  global $BDD;

  $feries = array();
  $BDD->query("SELECT date FROM fermeture;");
  while ($BDD->next_record())
  {
    $feries[] = $BDD->f('date');
  }

  $semaines = array();
  $infosDate = DateSql::getInfos($dateSql);
  $j = 1;
  $m = $infosDate['mois'];
  $a = $infosDate['annee'];

  while ($j < $infosDate['nbJours'])
  {
    # Au debut, on passe le week end
    while (DateSql::isWeekend(DateSql::create($j, $m, $a)))
    {
      $j++;
    }
    $date = DateSql::create($j, $m, $a);
    $nSemaine = date('W', DateSql::getInfos($date, 'timestamp'));

    $semaines[$nSemaine] = array();
    $semaines[$nSemaine]['debut'] = $j;
    $semaines[$nSemaine]['feries'] = 0;
    
    # On recherche la fin de semaine
    while(!DateSql::isWeekEnd(DateSql::create($j, $m, $a)))
    {
      if (in_array(DateSql::create($j, $m, $a), $feries))
        $semaines[$nSemaine]['feries']++;
      $j++;
    }
    $semaines[$nSemaine]['fin'] = $j - 1;
  }
  $semaines[$nSemaine]['fin'] = min( $semaines[$nSemaine]['fin']
                                   , $infosDate['nbJours'] );

  if ($semaines[$nSemaine]['fin'] < $semaines[$nSemaine]['debut'])
  {
    unset($semaines[$nSemaine]);
  }

  return $semaines;
}

/**
 * @brief  retourne le code html d'une liste d'options pour un select.
 *
 *  Retourne le code html d'une liste  d'options pour un select avec plusieurs
 *   colonnes d'une table affichés sur une ligne de texte (exemple: nom et prenom)
 *
 * @param $tab       tableau des elements du select
 * @param $value     clef du tableau servant pour l'option value
 * @param $column    clefs du tableau servant pour le texte affiché
 * @param $selected  indique la valeur a selectionner par defaut
 *
 * @return  Code HTML du select
 */
function slctOptMulti($tab=array(), $value, $column=array(), $selected=false)
{
  $ret = '';
  if ($selected == false)
  {
    $ret .= '<option value="" selected="true">-</option>';// champ vide
  } 
  foreach ($tab as $line)
  {
    $text = '';
    foreach ($column as $col)
    {
      $text .= $line[$col].' ';
    }    
    if ($line[$value] == $selected)
    {
      $ret .= sprintf( '<option value="%s" selected="true" >%s</option>'
                     , $line[$value], $text);
    }
    else
    {
      $ret .= sprintf('<option value="%s">%s</option>', $line[$value], $text);
    }
  }  
  return $ret;
}

/**
 * @brief  retourne le code html d'une liste d'options pour un select.
 *  
 * @param $tab       tableau des elements du select
 * @param $value     clef du tableau servant pour l'option value
 * @param $text      clef du tableau servant pour le texte affiché
 * @param $selected  indique la valeur a selectionner par defaut
 *
 * @return  Code HTML du select
 */ 
function select_options($tab=array(), $value, $text, $selected=false)
{
  $ret = '';
  if ($selected==false)
  {
    $ret .= '<option value="" selected="true">-</option>'; // champ vide
  }

  if (is_array($tab))
  {
    foreach ($tab as $line)
    {
      if ($line[$value] == $selected)
      {
        $ret .= sprintf( '<option value="%s" selected="true">%s</option>'
                       , $line[$value]
                       , $line[$text]
                       );
      }
      else
      {
        $ret .= sprintf( '<option value="%s">%s</option>'
                       , $line[$value]
                       , $line[$text]
                       );
      }
    }  
  }
  return $ret;
}

/**
 * Affiche le code html d'une liste d'options pour un select.
 *  
 * @param $tab       tableau des elements du select
 * @param $value     clef du tableau servant pour l'option value
 * @param $text      clef du tableau servant pour le texte affiché
 * @param $selected  indique la valeur a selectionner par defaut
 *
 * @return  Code HTML du select
 */ 
function p_options($tab=array(), $value, $text, $selected=false)
{
  print select_options($tab, $value, $text, $selected);
}

/**
 * array_merge avec gestion de liste Null
 */ 
function array_merge2($list1, $list2)
{
  if ($list1 && $list2)
  {
    return array_merge($list1, $list2);   
  }
  else
  {
    if ($list1)
      return $list1;
    else
      return $list2;
  }
}

/**
 * Ordonne une array en fonction d'une de ses colonnes.
 */ 
function array_sort_ASC($tab = array(), $rowName)
{
  if ($tab && $rowName)
  {
    $t = array();
    foreach ($tab as $key => $row) 
    {
      $t[$key] = $row[$rowName];
    }
    array_multisort($t, SORT_ASC, $tab);
    return $tab;
  }
}  

/**
 * Ordonne une array en fonction d'une de ses colonnes.
 */ 
function array_sort_DESC($tab = array(), $rowName)
{
  if ($tab && $rowName)
  {
    $t = array();
    foreach ($tab as $key => $row) 
    {
      $t[$key]  = $row[$rowName];
    }
    array_multisort($t, SORT_DESC, $tab);
    return $tab;
  }
}

?>
